import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;


/**
 * Thread d'envoie des messages au système linux
 * @author H4201
 *
 */
public class WindowsEnvoi extends Thread{
	
	/**
	 * Socket utilisé pour la communication
	 */
	private Socket socket;
	
	/**
	 * Boite aux lettres contenant les messages à envoyer
	 */
	private LinkedBlockingQueue<String> bal;
	
	/**
	 * Permet l'arrêt du thread
	 */
	private static boolean stop;
	
	/**
	 * Constructeur de WindowsEnvoi
	 * @param ctrl Controleur du thread
	 * @param s Socket utilisé
	 */
	public WindowsEnvoi(ControleurFenetrePrincipale ctrl, Socket s) {
		socket = s;
		bal = ctrl.getBal();
		stop = false;
	}

	/**
	 * Arrêt du thread en cours
	 */
	public static void arret () {
		stop = true;
	}
	
	/**
	 * Action effectuée par le thread.
	 * Lecture de la boite d'envoie et envoie d'un message à linux.
	 */
	public void run() {
		try {
			PrintWriter out = new PrintWriter(socket.getOutputStream());
			String message;
		
		    while (!stop) {
		    	message = bal.poll(1,TimeUnit.SECONDS);
		    	if (message != null) {
		    		out.println(message);
		    		out.flush();
		    	}
		    }
		    out.close();
		    socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}   
	}
}